/*
 * $Library: Moyrax Core $
 * $Module: AJAX Support Core $
 * $Date: 2008/01/28 23:35:17 $
 * $Rev: @REV $
 */
$.ajax = {
	/**
	 * Crea un objeto XMLHTTPRequest, y establece la función de espera.
	 *
	 * @param $fpProc  Puntero a la función que recibirá la notificación de carga.
	 * @param $id      Identificador relacionado con esta conexión.
	 * @return        Devuelve el objeto XMLHTTPRequest creado.
	 */
	create : function($fpProc, $id)
	{
		var $pXMLHttpReq = false;

		if (window.XMLHttpRequest) {
			$pXMLHttpReq = new XMLHttpRequest();
		}
		if ( $.ie() ) {
			try { $pXMLHttpReq = new ActiveXObject ("Microsoft.XMLHTTP"); }
			catch (err){
				try { $pXMLHttpReq = new ActiveXObject ("Msxml2.XMLHTTP"); }
				catch (err){}
			}
		}
		$pXMLHttpReq.onreadystatechange = function(){
			if ($pXMLHttpReq.readyState == 4 &&
			   ($pXMLHttpReq.status == 200 || $.isLocal(location.href)) )
			{
				if ( $.isProc($fpProc) )
					$fpProc($pXMLHttpReq, $id);
			}
		};
		return($pXMLHttpReq);
	},
	/**
	 * Recupera datos externos utilizando ajax.
	 *
	 * @param $url     Dirección de la página a ser devuelta.
	 * @param $fpProc  Puntero a la función que recibirá la notificación de carga.
	 * @param $id      Identificador relacionado con esta conexión.
	 */
	get : function($url, $fpProc, $id)
	{
		var $pAjax = this.create($fpProc, $id);

		if ( !$pAjax )
			return(false);

		$pAjax.open('GET', $url, true);
		$pAjax.send("");

		return($pAjax);
	},
	/**
	 * Envía datos a un servidor y espera la respuesta.
	 *
	 * @param $postData  Datos a ser enviados.
	 * @param $url       Dirección de la página a ser devuelta.
	 * @param $fpProc    Puntero a la función que recibirá la notificación de carga.
	 * @param $id        Identificador relacionado con esta conexión.
	 */
	post : function($postData, $url, $fpProc, $id)
	{
		var $pAjax = this.create($fpProc, $id);

		if ( !$pAjax )
			return(false);

		$pAjax.open('POST', $url, true);
		$pAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
		$pAjax.send($postData);

		return($pAjax);
	},
	/**
	 * Carga un script local y lo ejecuta.
	 *
	 * @param $url         Dirección del archivo JavaScript.
	 * @param $execProc    Función que se llamará luego de ejecutar el código.
	 * @param globalScope Determina si el script se ejecutará en alcance global.
	 */
	exec : function($url, $execProc, globalScope)
	{
		var $temp = $url;

		this.get($url, function($xmlResp){
			var $sCode = $xmlResp.responseText;

			$.eval($sCode, globalScope);

			if ( $.isProc($execProc) )
				$execProc($url);
		});
	}
};
